﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using System.Resources;
using System.Data.Linq;
using System.Linq;
using CDStore3Tiers;

namespace CuaHangDiaNhac
{
	public partial class frmNhaCungCap : DevComponents.DotNetBar.Metro.MetroForm
	{
		log4net.ILog log = log4net.LogManager.GetLogger("Nhà cung cấp");
		StoreCDDataContext db;
		XuLyForm XL = new XuLyForm();
		XuLyNCC XLNCC;
		List<NhaCungCap> list;
		//DiaNhac dn;


		public void lockLogin()
		{
			string id = frmLogin.id;
			XLPhanQuyen phanquyen = new XLPhanQuyen();
			List<TaiKhoanChucNang> tkcn = new List<TaiKhoanChucNang>();
			tkcn = phanquyen.TKChucNang(frmLogin.id);


			if (phanquyen.CoQuyen(id, 501))
			{
				btnThemNCC.Enabled = true;
				btnAddNCC.Visible = true;
			}
			if (phanquyen.CoQuyen(id, 502))
			{
				btnRemoveNCC.Visible = true;
				tsDelete.Enabled = true;
			}
			if (phanquyen.CoQuyen(id, 503))
			{
				tsSave.Enabled = true;
				btnSaveNCC.Visible = true;
			}
		}

		public void closeall()
		{
			tsDelete.Enabled = false;
			tsSave.Enabled = false;
			btnThemNCC.Enabled = false;
			btnSaveNCC.Visible = false;
			btnAddNCC.Visible = false;
			btnRemoveNCC.Visible = false;
		}



		public frmNhaCungCap()
		{
			XLNCC = new XuLyNCC();
			db = new StoreCDDataContext();
			db.Connection.ConnectionString = getConfig.getConnection();
			InitializeComponent();
		}

		private void frmNhaCungCap_Load(object sender, EventArgs e)
		{
			closeall();
			lockLogin();
			db = new StoreCDDataContext();
			db.Connection.ConnectionString = getConfig.getConnection();
			LoadDGVNCC();
			log.Info(frmLogin.id + ": đã load lên form nhà cung cấp");
            txtPage.ForeColor = Color.Red;
		}
		DataGridViewTextBoxColumn colMaNCC;
		DataGridViewTextBoxColumn colTenNCC;
		DataGridViewTextBoxColumn colDiaChiNCC;
		DataGridViewTextBoxColumn colSDTNCC;
        int PagingNumber = 0;
        int PagingSize = 25;
		public void LoadDSNCC()
		{
			cbxLocDLNCC.SelectedIndex = 0;
			// db = new StoreCDDataContext();
			XLNCC = new XuLyNCC();
			var nhacungcap = db.NhaCungCap_SelectAll();
			BindingSource bd = new BindingSource();
            bd.DataSource = nhacungcap.Skip(PagingNumber).Take(PagingSize);
			bindingNavigator1.BindingSource = bd;
			dgvNCC.DataSource = bd;
            lbPageTotal.Text = (XLNCC.TongSoTrang(PagingSize)).ToString();
            txtPage.Text = (XLNCC.SoTrangHienTai(PagingNumber, PagingSize)).ToString();
		}
		public void LoadDGVNCC()
		{
			dgvNCC.DataSource = null;

			colMaNCC = new DataGridViewTextBoxColumn();
			colMaNCC.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			colMaNCC.DataPropertyName = "MaNCC";
			colMaNCC.HeaderText = "Mã nhà cung câp";
			colMaNCC.Name = "cnameMaNCC";
            colMaNCC.ReadOnly = true;
			dgvNCC.Columns.Add(colMaNCC);

			colTenNCC = new DataGridViewTextBoxColumn();
			colTenNCC.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			colTenNCC.DataPropertyName = "TenNCC";
			colTenNCC.HeaderText = "Tên nhà cung cấp ";
			colTenNCC.Name = "cnameTenNCC";
			dgvNCC.Columns.Add(colTenNCC);

			colDiaChiNCC = new DataGridViewTextBoxColumn();
			colDiaChiNCC.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			colDiaChiNCC.DataPropertyName = "DiaChiNCC";
			colDiaChiNCC.HeaderText = "Địa chỉ nhà cung cấp";
			colDiaChiNCC.Name = "cnameDCNCC";
			dgvNCC.Columns.Add(colDiaChiNCC);

			colSDTNCC = new DataGridViewTextBoxColumn();
			colSDTNCC.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			colSDTNCC.DataPropertyName = "SDT";
			colSDTNCC.HeaderText = "Số điện thoại";
			colSDTNCC.Name = "cnameSDTNCC";
			dgvNCC.Columns.Add(colSDTNCC);
			LoadDSNCC();
		}


		private void LockContextMenu(bool p)
		{
		
		}

		private void frmNhaCungCap_Activated(object sender, EventArgs e)
		{
			//  db = new StoreCDDataContext();
			LoadDGVNCC();
		}


		private void tsRefesh_Click(object sender, EventArgs e)
		{
			LoadDGVNCC();
		}

		private void tsDelete_Click(object sender, EventArgs e)
		{
			//  db = new StoreCDDataContext();
			//NhaCungCap ncc = new NhaCungCap();
			//if (dgvNCC.SelectedRows.Count > 0)
			//{
			//    foreach (DataGridViewRow r in dgvNCC.SelectedRows)

			//        {
			//            int selectMaNCC = int.Parse(r.Cells["cnameMaNCC"].Value.ToString()); ;
			//            DialogResult accept = DevComponents.DotNetBar.MessageBoxEx.Show("Bạn muốn xóa Nhà cung cấp này" + selectMaNCC.ToString(), "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
			//            if (accept == DialogResult.Yes)
			//            {
			//                var xoancc = db.NhaCungCap_Delete(selectMaNCC);
			//                db.SubmitChanges();
			//                LoadDGVNCC();
			//            }
			//        }
			//}
			foreach (DataGridViewRow r in dgvNCC.SelectedRows)
			{
				try
				{
					int selectMaNCC = int.Parse(r.Cells["cnameMaNCC"].Value.ToString());
				    string ten = XLNCC.TenNCC(selectMaNCC);
				    
					var xoancc = db.NhaCungCap_Delete(selectMaNCC);
					db.SubmitChanges();
					log.Info(frmLogin.id + ": đã xóa nhà cung cấp " + ten);
					
				}
				catch (Exception ex)
				{
					DevComponents.DotNetBar.MessageBoxEx.Show(ex.Message, "Không thể xóa vì nhà cung cấp này có trong đĩa nhạc !", MessageBoxButtons.OK, MessageBoxIcon.Error);
					log.Error(frmLogin.id + ": xóa nhà cung cấp thất bại");
				}
			}
            LoadDGVNCC();
		}

		private void dgvNCC_MouseDown(object sender, MouseEventArgs e)
		{
			DataGridView.HitTestInfo hit;
			if (e.Button == MouseButtons.Right)
			{
				hit = dgvNCC.HitTest(e.X, e.Y);
				if (hit.Type == DataGridViewHitTestType.Cell)
				{
					if (!((DataGridViewRow)(dgvNCC.Rows[hit.RowIndex])).Selected)
					{
						dgvNCC.ClearSelection();
						((DataGridViewRow)dgvNCC.Rows[hit.RowIndex]).Selected = true;
					}
				}
			}
			if (dgvNCC.SelectedRows.Count > 1)
				LockContextMenu(false);
			else
				LockContextMenu(true);
		}

		private void btnThemNCC_Click(object sender, EventArgs e)
		{
			//  db = new StoreCDDataContext();
			NhaCungCap ncc = new NhaCungCap();
		    ncc.SDT = 0;
			try
			{
                if (txtTenNCC.Text != "" && txtDiaChiNCC.Text != "" && txtSDTNCC.Text != "" && txtSDTNCC.Text.Trim().All(char.IsDigit))
			    {
                    ncc.TenNCC = txtTenNCC.Text.Trim();
                    ncc.DiaChiNCC = txtDiaChiNCC.Text.Trim();
                    ncc.SDT = Convert.ToInt32(txtSDTNCC.Text);
                    if (XLNCC.KiemTraTrung(ncc.TenNCC, ncc.DiaChiNCC, Convert.ToInt32(ncc.SDT)) == 1)
			        {
			            MessageBoxEx.Show("Nhà cung câp này đã tồn tại!");
			        }
                    else
                    {
                        db.NhaCungCap_InSert(ncc.TenNCC, ncc.DiaChiNCC, ncc.SDT);
                        log.Info(frmLogin.id + ": đã thêm nhà cung cấp " + ncc.TenNCC);
                        db.SubmitChanges();
                    }
                    
			    }
			    else
			    {
			        MessageBoxEx.Show("Bạn phải nhập dầy đủ và chính xác thông tin để thêm NCC! ");
			    }
				
			}
			catch (Exception ex)
			{
				DevComponents.DotNetBar.MessageBoxEx.Show(ex.Message, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
				log.Error(frmLogin.id + ": thêm nhà cung cấp thất bại");
			}
			LoadDGVNCC();
		}

		private void tsSave_Click(object sender, EventArgs e)
		{
			try
			{
				XLNCC.UpdateNCC(dgvNCC);
				log.Info(frmLogin.id + ": lưu các dữ liệu thay đổi của nhà cung cấp ");
			}
			catch (Exception ex)
			{
				DevComponents.DotNetBar.MessageBoxEx.Show(ex.Message, "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
				log.Error(frmLogin.id + ": lưu dữ liệu nhà cung cấp thất bại");
			}
		}

		private void btnAddNCC_Click(object sender, EventArgs e)
		{
			navigationPane1.Expanded = true;
			exThemNCC.Expanded = true;
			log.Info(frmLogin.id + ": đã chọn chức năng thêm nhà cung cấp");
		}

		private void tsTimkiem_TextChanged(object sender, EventArgs e)
		{
			XLNCC = new XuLyNCC();
			XL.loadDGV(bindingNavigator1, dgvNCC, XLNCC.SearchbyIDNCC(list, tsTimkiem.Text));
		}

		private void tsTimkiem_MouseUp(object sender, MouseEventArgs e)
		{
			tsTimkiem.Clear();
		}

		private void tsTimkiem_Leave(object sender, EventArgs e)
		{
			if (string.IsNullOrEmpty(tsTimkiem.Text))
			{
				tsTimkiem.Text = "Tìm kiếm theo Mã NCC hay tên NCC...";
				XL.loadDGV(bindingNavigator1, dgvNCC, list);
			}
		}
		public void LoadNCCCombobox()
		{
			XLNCC = new XuLyNCC();
			{
				list = XLNCC.GetList(cbxLocDLNCC.SelectedIndex);
				XL.loadDGV(bindingNavigator1, dgvNCC, list);
			}
		}

		private void cbxLocDLNCC_SelectedIndexChanged(object sender, EventArgs e)
		{
			LoadNCCCombobox();
		}


        private void txtPage_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                bool isValid = txtPage.Text.All(char.IsDigit);
                if (isValid && txtPage.Text != "")
                {
                    int textchange = Convert.ToInt32(txtPage.Text);
                    int tongtrang = Convert.ToInt32(lbPageTotal.Text);
                    if (textchange > 0 && textchange <= tongtrang)
                    {
                        PagingNumber = PagingSize * (textchange - 1);
                        LoadDGVNCC();
                    }
                    else if (tongtrang == 1)
                    {
                        MessageBoxEx.Show("Danh sách này chỉ có 1 trang");
                    }
                    else
                    {
                        MessageBoxEx.Show("Vui lòng nhập số trang từ 1 đến " + lbPageTotal.Text);
                    }
                }
                else
                {
                    MessageBoxEx.Show("Vui lòng nhập số trang từ 1 đến " + lbPageTotal.Text);
                }
            }
        }

        private void txtPage_Leave(object sender, EventArgs e)
        {
            LoadDGVNCC();
        }

        private void lbDpre_Click(object sender, EventArgs e)
        {
            PagingNumber = 0;
            LoadDGVNCC();
        }

        private void lbPre_Click(object sender, EventArgs e)
        {
            int sotranghientai = Convert.ToInt32(txtPage.Text);
            int tongtrang = Convert.ToInt32(lbPageTotal.Text);
            if (sotranghientai > 1)
            {
                PagingNumber -= PagingSize;
                LoadDGVNCC();
            }
        }

        private void lbNext_Click(object sender, EventArgs e)
        {
            int sotranghientai = Convert.ToInt32(txtPage.Text);
            int tongtrang = Convert.ToInt32(lbPageTotal.Text);
            if (sotranghientai < tongtrang)
            {
                PagingNumber += PagingSize;
                LoadDGVNCC();
            }
        }

        private void lbDnext_Click(object sender, EventArgs e)
        {
            int tongtrang = Convert.ToInt32(lbPageTotal.Text);
            PagingNumber = PagingSize * (tongtrang - 1);
            LoadDGVNCC();
        }






	}
}

